/** Keriosity, ESIR 2
 * 	MapRoute (Modele): classe permettant de tracer le chemin parcouru par Keriosity sur la carte
 *	@author: GOUYET Brett
 *	@date: 14/05/2012
 */

package keriosity.map;

import java.util.ArrayList;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.MapView.Projection;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;

/** Classe permettant de tracer le chemin parcouru par Keriosity sur la carte **/
public class MapRoute extends org.osmdroid.views.overlay.Overlay {
	
	protected ArrayList<GeoPoint> _pointRoute; //tableau comportant nos points
	
	/** CONSTRUCTEUR **/
	public MapRoute(Context ctx) {
		super(ctx);
		_pointRoute = new ArrayList<GeoPoint>();		
	}
    
	
	/** Methode ajoutant un point a notre chemin **/
    public void addPoint(GeoPoint point){
    	_pointRoute.add(point);
    }
    
    
    /** Methode supprimant tout les traits sur la carte **/
    public void clean(){
    	
    	if(_pointRoute.size() > 0){
    		GeoPoint keriosityPosition = _pointRoute.get(_pointRoute.size()-1); //on recupere la position actuelle de Keriosity
    		_pointRoute.clear(); //on supprime tout les points
    		_pointRoute.add(keriosityPosition); //on rajoute la position de Keriosity
    	}
    }
    
    
    /** Methode dessinant l'itineraire sur la carte **/
    public void draw(Canvas canvas, MapView mapView, boolean shadow){       

    	Paint paint = new Paint();
    	paint.setColor(Color.rgb(71, 185, 228)); //blue clair
    	paint.setAlpha(200); //rend le trait transparent   
    	paint.setStrokeWidth(8); //taille du trait
    	paint.setStyle(Paint.Style.FILL_AND_STROKE);    
    
        Path path = new Path();
        Projection projection = mapView.getProjection();

        for (int i = 0; i < _pointRoute.size()-1; i++){
        	
        	//on cree deux points pour dessiner notre ligne
            Point point1 = new Point();
            Point point2 = new Point();

            //on recupere les points en fonctions des coordonnees gps
            projection.toPixels((GeoPoint)_pointRoute.get(i),point1);
            projection.toPixels((GeoPoint)_pointRoute.get(i+1),point2);

            path.moveTo(point2.x, point2.y); //on se deplace au point suivant
            path.lineTo(point1.x,point1.y); //on dessine une ligne entre les deux points
        }
        canvas.drawPath(path, paint); //on dessine tous les traits
    }
}